﻿// Inner Fire 游戏引擎库
// 渲染项目类-UI渲染项目
//
// Copyright (c) 2024 by 尔西大帝. All rights reserved.
//
// 用于UI渲染项目
//
// Author: 尔西大帝
// Email: 2670613871@qq.com
// Created: 2024-12-21

#pragma once

#include <dx/mesh/basic_render_item.h>
#include <dx/ui/ui_def.h>

namespace ifire::dx {
class UICanvas;

class UIRenderItem : public BasicRenderItem {
public:
  UIRenderItem(const UIWidget& widget, size_t capacity);
  UIRenderItem(const UIRenderItem& lhs) = delete;
  UIRenderItem& operator=(const UIRenderItem& lhs) = delete;
  ~UIRenderItem() = default;

  // 设置父级
  void SetParent(UIRenderItem* parent) { mParent = parent; }
  // 设置Canvas
  void SetCanvas(UICanvas* canvas) { mCanvas = canvas; }
  
  // 返回父级的位置信息，用于计算当前的项目
  // 如果已经在最高级，返回Canvas的位置信息，做为一个父级。
  UIWidget GetParentWidget();
  // 计算Widget
  UIWidget CalcWidget();

  // 设置是否可见
  void SetVisible(bool state);
  
  // 设置大小
  void SetScale(XMFLOAT2 scale);

public:
  // 在池中的索引
  size_t mPoolIndex;
  // 在池中的容量
  size_t mCapacity;
  // 此UI对象的Widget
  UIWidget mWidget;
  // 此对象是否可见
  bool mVisible;

protected:
  // 父级
  UIRenderItem* mParent;
  // 此对象所属的Canvas
  UICanvas* mCanvas;
};

} // namespace ifire